package org.ehe.erp.service.quality;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.erp.domain.purchase.vo.ErpPurchaseOrderItemVo;
import org.ehe.erp.domain.quality.ErpQualityTask;
import org.ehe.erp.domain.quality.bo.ErpQualityTaskBo;
import org.ehe.erp.domain.quality.dto.QualityTaskQueryDto;
import org.ehe.erp.domain.quality.vo.ErpQualityTaskVo;

import java.util.Collection;
import java.util.List;

/**
 * 质检任务服务接口
 *
 * @author zhangnn
 * @className ErpQualityTaskService
 * @description 质检任务业务逻辑接口
 * @date 2025-09-11 15:00:00
 */
public interface ErpQualityTaskService extends IService<ErpQualityTask> {

    /**
     * 分页查询质检任务列表
     */
    TableDataInfo<ErpQualityTaskVo> queryPageList(QualityTaskQueryDto queryDto, PageQuery pageQuery);

    /**
     * 查询质检任务列表
     */
    List<ErpQualityTaskVo> queryList(QualityTaskQueryDto queryDto);

    /**
     * 根据ID查询质检任务
     */
    ErpQualityTaskVo queryById(Long id);

    /**
     * 新增质检任务
     */
    ErpQualityTask insertByBo(ErpQualityTaskBo bo);

    /**
     * 修改质检任务
     */
    Boolean updateByBo(ErpQualityTaskBo bo);

    /**
     * 校验并删除质检任务
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 校验任务单号是否唯一
     */
    Boolean checkTaskNoUnique(String taskNo, Long id);

    /**
     * 分配任务给指定人员
     */
    ErpQualityTask assignTask(Long taskId, Long assignUserId, String assignUserName);

    /**
     * 开始质检
     */
    Boolean startQuality(Long taskId);

    /**
     * 完成质检
     * @param taskId 任务ID
     * @param qualityResult 质检结果 (2-质检完成, 3-质检不合格)
     * @param remark 备注
     */
    Boolean completeQuality(Long taskId, Integer qualityResult, String remark);

    /**
     * 暂停任务
     */
    Boolean pauseTask(Long taskId, String remark);

    /**
     * 恢复任务
     */
    Boolean resumeTask(Long taskId);

    /**
     * 根据批次ID查询质检任务
     */
    List<ErpQualityTaskVo> getByBatchId(Long orderNo);

    /**
     * 获取待质检任务数量
     */
    Integer getPendingTaskCount(Long assignUserId);

    /**
     * 获取超时任务列表
     */
    List<ErpQualityTaskVo> getTimeoutTasks();

    /**
     * 批量分配任务
     */
    Boolean batchAssignTasks(List<Long> taskIds, Long assignUserId, String assignUserName);

    /**
     * 更新任务优先级
     */
    Boolean updatePriority(Long taskId, Integer priority);

    /**
     * 根据BOM到货情况自动创建质检任务
     * @param bomId BOM ID
     * @param bomName BOM名称
     * @return 是否创建成功
     */
    ErpQualityTask autoCreateQualityTaskByBomArrival(Long bomId, String bomName,String orderNo);

    /**
     * 检查并处理超时任务
     */
    void checkAndHandleTimeoutTasks();

    /**
     * 生成质检任务单号
     */
    String generateTaskNo();

    /**
     * 将状态为完成(2)或不合格(3)的任务的超时标记重置为0
     */
    void cleanupCompletedTaskTimeoutFlags();

    /**
     * 获取质检项目列表
     * @param id
     * @return
     */
    TableDataInfo<ErpPurchaseOrderItemVo> queryQualityItems(Long id);

    ErpQualityTaskVo getByOrderNo(String no);

    ErpQualityTask approveTask(Long taskId);

    ErpQualityTask rejectTask(Long taskId);

    ErpQualityTask submitDays(Long id, Integer days);

    ErpQualityTask respondOrder(Long id,Integer days);
}
